#include <iostream>
#include <fstream>
#include <limits>
#include <cmath>
#include <vector>
#include <algorithm>
#include "PriorityQueue.h"
using namespace std;
using std::pair;

struct Point {
    double x;   // x coordinate
    double y;   // y coordinate
    //int  name[20]; // name of the point
	Point() : x(0), y(0) {};
	Point(double x1, double y1) : x(x1), y(y1) {};
};

class RandomGraph {
public:
	RandomGraph(Point center, int sigma1, int sigma2, int num1, int num2) { // генерация случайного графа
		for (int i=0; i<num1; i++) {
	   Point point=generateRandomPoint(center, sigma1);
	   verteces.push_back(point);
	   for (int j=0; j<num2; j++) {
		   Point point1=generateRandomPoint(point, sigma2);
		   verteces.push_back(point1);
	   }
   }      
}
	~RandomGraph() {};
	int size() {
		return verteces.size();
	};
	int getDistance(int v1, int v2); 
	Point getVertex(int v);
private:
	vector<Point> verteces;
	Point generateRandomPoint(Point center, int sigma); // генерация случайной точки
};

class MST {
public:
	MST(RandomGraph& rgraph) : rg(rgraph) {};
	~MST() {};
	void getPrim(vector<pair<int, int>>& edges, vector<vector<int>>& vert);
	void getKr(vector<pair<int, int>>& edges);
	void eulerianPath(vector<vector<int>>& vert, vector<int>& way);
private:
	RandomGraph rg;
};


